import { defineStore, storeToRefs } from 'pinia';
import request from '@/untils/request';
import { todoItem } from '@/types/data';
import footerStore from "@/store/modules/footerStore";
import { ElMessage } from 'element-plus';

const mainStore = defineStore('main', {
	state: () => {
		return {
			list: [] as todoItem[],
		}
	},
	actions: {
		async getTodos(user_id: number) {
			request.get('/todo/query', {
				params: {
					user_id,
				}
			}).then((res: any) => {
				let al: any[] = res.data.items;
				this.list = al.map((item) => {
					return {
						id: item.item_id,
						name: item.item_content,
						done: item.done,
					} as todoItem;
				});
			}).catch((err) => {
				ElMessage.error('网络错误');
			});
		},
		async delTodos(user_id: number, item_id: number) {
			request.delete("/todo/del", {
				params: {
					item_id,
				}
			}).then((res: any) => {
				if (res.data.code === 500) ElMessage.error(res.data.message);
				this.getTodos(user_id);
			}).catch((err) => {
				ElMessage.error('网络错误');
			});
		},
		async updateTodos(user_id: number, item_id: number, key: string, value: string | boolean) {
			request.patch("/todo/update", {
				item_id,
				key,
				value,
			}).then((res: any) => {
				if (res.data.code === 500) ElMessage.error(res.data.message);
				this.getTodos(user_id);
			}).catch((err) => {
				ElMessage.error('网络错误');
			});
		},
		async addTodos(user_id: number, name: string) {
			if (typeof name === "string" && name.trim() === '') {
				ElMessage.error('不能为空');
				return;
			}
			request.post('/todo/add', {
				user_id,
				name,
			}).then((res: any) => {
				if (res.data.code === 500) ElMessage.error(res.data.message);
				this.getTodos(user_id);
			}).catch((err) => {
				ElMessage.error('网络错误');
			});
		},
		async updateAllStatus(user_id: number, done: boolean) {
			let arrPromise = this.list.map((item: todoItem) => {
				this.updateTodos(user_id, item.id, "done", done);
			});
			await Promise.all(arrPromise);
		},

		async clearCompeleted(user_id: number) {
			const arrPromise = this.compeleted.map((item: todoItem) => {
				this.delTodos(user_id, item.id);
			});
			await Promise.all(arrPromise);
		},
	},
	getters: {
		mainRadioStatus(state: any) {
			return state.list.every((item: todoItem) => item.done);
		},
		compeleted(state: any) {
			return state.list.filter((item: todoItem) => item.done);
		},
		unCompeleted(state: any) {
			return state.list.filter((item: todoItem) => !item.done);
		},
		renderList(state: any) {
			const active = footerStore().active;
			if (active === "已完成")
				return state.list.filter((item: todoItem) => item.done);
			if (active === "未完成")
				return state.list.filter((item: todoItem) => !item.done);
			return state.list;
		}
	},

})

export default mainStore;